﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MetroFramework.Forms;
using System.Diagnostics;
using ComLib.ComType;

namespace ConfigManager.ChildForms
{
    public partial class FormDetectAssessOptions : MetroForm
    {
        private DetectAssessPolicies _option = new DetectAssessPolicies();
        public DetectAssessPolicies Option
        {
            get { return _option; }
        }

        private List<bool> _itemValues = new List<bool>();

        protected Stopwatch _sw = new Stopwatch();
      
        public FormDetectAssessOptions()
        {
            InitData();
            InitializeComponent();
        }

        public FormDetectAssessOptions(DetectAssessPolicies opt)
        {
            _option = opt;
            InitData();
            InitializeComponent();
        }

        private void buttonCancell_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.Close();
        }

        private void buttonOK_Click(object sender, EventArgs e)
        {
            UpdateData();
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.Close();
        }

        private void FormDetectAssessOptions_Load(object sender, EventArgs e)
        {
            InitCtrls();
        }

        private void InitCtrls()
        {
            List<string> listItems = AssessPolicyProperties.DetectItems;
            listView1.CheckBoxes = true;
            for (int i = 0; i < listItems.Count; i++)
            {
                ListViewItem item = new ListViewItem(listItems[i]);
                item.Checked = _itemValues[i];
                listView1.Items.Add(item);
           }
        }

        private void UpdateData()
        {
            string key = "";
            bool value = false;
            Type type = _option.GetType(); //获取类型
            List<string> properties = AssessPolicyProperties.Properties;
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                key = listView1.Items[i].Name;
                value = listView1.Items[i].Checked;
                System.Reflection.PropertyInfo propertyInfo = type.GetProperty(properties[i]);
                propertyInfo.SetValue(_option, value, null); //给对应属性赋值
            }
        }

        private void InitData()
        {
            InitItems();
        }

        private void InitItems()
        {
            _itemValues.Add(_option.FileCorrupt);
            _itemValues.Add(_option.FileFormat);
            _itemValues.Add(_option.FileSize);
            _itemValues.Add(_option.Redeye);
            _itemValues.Add(_option.ShoulderLine);//5
            _itemValues.Add(_option.ImgCorrupt);
            _itemValues.Add(_option.ImgDPI);
            _itemValues.Add(_option.ImgNoise);
            _itemValues.Add(_option.ImgBits);
            _itemValues.Add(_option.Highbrightness);
            _itemValues.Add(_option.HeadTop);
            _itemValues.Add(_option.Headleft);
            _itemValues.Add(_option.Headright);
            _itemValues.Add(_option.Headhigh);
            _itemValues.Add(_option.Headlow);
            _itemValues.Add(_option.Averagegray);
            _itemValues.Add(_option.Bkcolor);
            _itemValues.Add(_option.Bklightover);
            _itemValues.Add(_option.Bklightunder);
            _itemValues.Add(_option.Bkuniform);
            _itemValues.Add(_option.ColorWearUn);
            _itemValues.Add(_option.Colourcast);
            _itemValues.Add(_option.Cropresolution);
            _itemValues.Add(_option.Expression);
            _itemValues.Add(_option.Faceblur);
            _itemValues.Add(_option.Eyedistance);
            _itemValues.Add(_option.Eyesopen);
            _itemValues.Add(_option.EyeYCood);
            _itemValues.Add(_option.Eyesfrontal);
            _itemValues.Add(_option.ImgWidHei);
            _itemValues.Add(_option.Facefrontal);
            _itemValues.Add(_option.Glasscover);
            _itemValues.Add(_option.Glasscovereye);
            _itemValues.Add(_option.Glassflash);
            _itemValues.Add(_option.Glassframe);
            _itemValues.Add(_option.Hasface);
            _itemValues.Add(_option.Haircovereye);
            _itemValues.Add(_option.Largehead);
            _itemValues.Add(_option.Smallhead);
            _itemValues.Add(_option.Lightuniform);
            _itemValues.Add(_option.Lowbrightness);
            _itemValues.Add(_option.Lowcs);
            _itemValues.Add(_option.Mouthclose);
            _itemValues.Add(_option.Overexposure);
            _itemValues.Add(_option.Underexposure);
            _itemValues.Add(_option.OverSharpened);
            _itemValues.Add(_option.Hotspots);
            _itemValues.Add(_option.Wearsglasses);
            _itemValues.Add(_option.SkinSmoothed);
            _itemValues.Add(_option.Skincolorun);
            _itemValues.Add(_option.Grayrange);
        }

    }


}
